package org.dezenho.client.RN;

import java.rmi.RemoteException;
import java.util.List;
import org.dezenho.client.IU.SalaEsperaObserver;
import org.dezenho.client.SO.DezenhoClient;

/**
 * Classe Responsavel pelo controle da tela da sala de Espera
 * 
 * @author marcelasobrinhopereira
 * 
 */
public class SalaEspera implements SalaEsperaSubject {

	private List<String> jogadoresEspera;
	private SalaEsperaObserver salaEsperaObserver;

	/**
	 * Solicita que o servidor insira o jogador na sala de espera
	 */
	public void insereJogadorSalaEspera() {
		String IPUsuario = DezenhoClient.getInstance().getIPUsuario();
		try {
			DezenhoClient.getInstance().getServer().insereJogadorSalaEspera(
					IPUsuario);
		} catch (RemoteException e) {
			DezenhoClient.getInstance().getDezenhoTelaClient().apresentaMensagem("Erro de conexao");
			e.printStackTrace();
		}
	}

	/**
	 * Atualiza lista de jogadores em espera
	 * 
	 * @param jogadoresEspera
	 */
	public void atualizaSalaEspera(List<String> jogadoresEspera) {
		setJogadoresEspera(jogadoresEspera);
		notifyJogadoresEspera();
	}

	/**
	 * Metodo que notifica mudancas na sala de espera Metodo do padrao observer
	 */
	public void notifyJogadoresEspera() {
		getSalaEsperaObserver().updateJogadoresEspera();
	}

	// Metodos de acesso

	public List<String> getJogadoresEspera() {
		return jogadoresEspera;
	}

	public void setJogadoresEspera(List<String> jogadores) {
		this.jogadoresEspera = jogadores;
	}

	public void setSalaEsperaObserver(SalaEsperaObserver salaEsperaObserver) {
		this.salaEsperaObserver = salaEsperaObserver;
	}

	private SalaEsperaObserver getSalaEsperaObserver() {
		return salaEsperaObserver;
	}

}
